import java.io.Serializable;
import java.util.Collection;
import java.util.GregorianCalendar;
import java.util.HashMap;
import java.util.Observable;

public class Motcle  extends Observable implements Serializable  {
	// ************************************************************************************************************
	// Constantes
	// ************************************************************************************************************

	private static final long serialVersionUID = 1L;

	// ************************************************************************************************************
	// Attributs
	// ************************************************************************************************************

		private String _motcle;
		
		//Attributs d'association
		private HashMap<String, Ouvrage> _ouvrages;         
		private HashMap<String, Article> _articles;    
		// ************************************************************************************************************
		// Constructeur
		// ************************************************************************************************************

		/**
		 * Constructeur. 
		 * @param titre			titre du periodique
		 * 
		*/
	
		public Motcle(String motcle){
		this.setMotCle(motcle);
		this.setOuvrages(new HashMap<String, Ouvrage>());
		this.setArticles(new HashMap<String, Article>());
	}// Fin Constructeur
	
	
		// ************************************************************************************************************
		// Méthodes privées
		// ************************************************************************************************************
		
		// ------------------------------------------------------------------------------------------------------------
		// Affecteurs
		
			
	/**
	 * setter de l'attribut titre
	 * @param titre valeur à affecter à titre du periodique
	 */
	private void setMotCle(String motcle){
		_motcle = motcle;
	}

	private void setOuvrages(HashMap<String, Ouvrage> ouvrages){
		 _ouvrages = ouvrages;
	}
	
	private void setArticles(HashMap<String, Article> articles){
		_articles = articles;
	}
	
			

	//lie un ouvrage a l'auteur. Insere un ouvrage dans l'ensemble des ouvrages de l'auteur		
	private void lierOuvrage(String isbn, Ouvrage ouvrage){
		this.getOuvrages().put(isbn,ouvrage);
	} //fin lierOuvrage
	
	//lie un article a l'auteur. Insere un article dans l'ensemble des articles de l'auteur
	private void lierArticle(String titre, Article article){
		
		this.getArticles().put(titre, article);
	} //Fin lierArticle
	
	// ************************************************************************************************************
	// Méthodes publiques
    // ************************************************************************************************************

    // ------------------------------------------------------------------------------------------------------------
	// Accesseurs
			
	
	public String getMotCle() {
		return _motcle;
	}
	
	/** LISTE */
	//return la liste des ouvrages
	public HashMap<String, Ouvrage> getOuvrages(){
		return _ouvrages;
	}
	
	//return la liste des articles
	public HashMap<String, Article> getArticles(){
		return _articles;
	}
				
	
	/** un seul */
	//return l'ouvrage a partir d'un isbn
	public Ouvrage getOuvrage(String isbn) {
		return (Ouvrage) _ouvrages.get(isbn);
	}
	
	//return l'article a partir d'un titre
	public Article getArticle(String titre) {
	    return (Article) _articles.get(titre);
	}
		

	/**
	 * getter de l'ensemble des ouvrages
	 * @return une collection des ouvrages
	 */
	public Collection<Ouvrage> getOuvrage() {
		return _ouvrages.values();
	}
	
	/**
	 * getter de l'ensemble des articles
	 * @return une collection des articles issu du hashmap motcles de l'article
	 */
	public Collection<Article> getArticle() {
		return _articles.values();
	}
	
	
	
	
		//AJOUT d'un OUVRAGE Au motclé
	
	public void ajouterOuvrage(Ouvrage ouvrage){
		String isbn = ouvrage.getIsbn();
	
		//liaison de l'auteur avec le titre de l'ouvrage
		this.lierOuvrage(isbn,ouvrage);
		
	}
		
	public void ajouterArticle(Article article){
		String titre = article.getTitre();
		
		//liaison de l'auteur avec le titre de l'article
		this.lierArticle(titre, article);
	}


}
